#!/usr/bin/env python
# -*-coding:UTF-8 -*-
'''
@Project ：爬虫-波波老师
@File：08_qiutubaike.py
@Author ：文非
@Date：2021/3/1017:09
'''
# 需求 爬取糗事百科中热图模块下的所有糗事图片
import requests
import re
import os  # 创建一个文件夹保存所有图片

if __name__== "__main__":

    # 1 .ua伪装
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }


    # 2.配置 url 设置一个通用的url模板
    url_model = "https://www.qiushibaike.com/imgrank/page/%d/"

    # 3.配置url模板的对应的页码数目
    for page_num in range(1, 36):
        # 对应页码的url
        url_conn = format(url_model%page_num)
        print(page_num)

        # 4. 创建保存多页数据的文件夹格式
        path = "./糗事百科图片集/" + "糗事百科第"+str(page_num)+"页"
        # 创建一个文件夹，保存所有的爬取下来的图片
        if not os.path.exists(path):  # os模块方法 如果这个文件夹不存在
            os.makedirs(path)  # 在当前目录下新建一个文件夹  #  python 创建多层目录用makedirs 单层目录结构mkdir

        # 5.发送请求
        # 使用通用爬虫对url对应的一整张页面进行爬取
        pageText = requests.get(url=url_conn, headers=headers).text
        # 使用聚焦爬虫 对页面中的指定内容进行爬取 ---糗事百科每个段子的图片

        # 6.使用正则提取class = trumb的标签中的img标签中的链接
        ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        # re.S 就是把\n也识别到 是多行匹配 re.M是单行匹配 在爬虫数据解析中使用的一定是re.S
        img_src_List = re.findall(ex, pageText, re.S)  # re.findall()方法返回的是一个列表、
        print(img_src_List)

        # 7.循环拼接获取的图片的地址
        for src in img_src_List:
            # 拼接一个完整的图片地址url
            src = "https:" + src
            # 对这个图片地址发送get请求

            # 8. 对图片地址的数据发送请求
            img_data = requests.get(url=src, headers=headers).content
            # 持久化存储
            # 生成图片名称
            img_name = src.split("/")[-1]
            # 图片存储的路径
            img_path = "./糗事百科图片集/" + "糗事百科第"+str(page_num)+"页"+"/"+img_name
            with open(img_path,"wb")as fp:
                fp.write(img_data)
                print(img_name,"下载成功")




